package pers.mine.frontUser.service;

import pers.mine.nook.MsgException;
import pers.mine.nook.PageInfo;
import pers.mine.nook.QueryHandler;
import pers.mine.po.BasePO;

/**
 * 公共服务接口 改进[加入限制类型]
 * @author Mine
 * @since 2017年5月29日_上午9:41:59
 */
public interface BaseServicePro<T extends BasePO>{
	/**
	 * 增加一个实体,并自动生成uuid作为id
	 * @param one
	 * @return 添加结果,null表示成功,其他为错误信息
	 * @throws Exception
	 */
	public String addWithAutoId(T one) throws Exception;
	
	/**
	 * 增加一个实体,并校验id是否为空
	 * @param one
	 * @return 添加结果,null表示成功,其他为错误信息
	 * @throws Exception
	 */
	public String add(T one) throws Exception;
	
	/**
	 * 更新一个实体
	 * @param one 更新后信息
	 * @return 更新结果,null表示成功,其他为错误信息
	 * @throws Exception
	 */
	public String update(T one) throws Exception;
	
	/**
	 * 更新一个实体State[会检验id,和state的值]
	 * @param one 更新后信息
	 * @param tclass 用于实例化类
	 * @return 更新结果,null表示成功,其他为错误信息
	 * @throws Exception
	 */
	public String updateState(String id,Integer state,Class<T> tclass) throws Exception;
	
	/**
	 * 删除一个实体
	 * @param id 实体id
	 * @return 删除结果,null表示成功,其他为错误信息
	 * @throws Exception
	 */
	public String delete(String id) throws Exception;
	
	/**
	 * 通过id查询实体
	 * @param id 实体id
	 * @return 实体
	 * @throws MsgException,Exception
	 */
	public T findOneById(String id) throws MsgException,Exception;
	
	/**
	 * 通过查询条件查询实体分页列表
	 * @param queryHandler 查询条件
	 * @return 分页结果
	 * @throws MsgException,Exception
	 */
	public PageInfo<T> findSomeByQueryHandler(QueryHandler queryHandler) throws Exception;
	
}
